5
תגובות

בעיה עם pdo

פתח nikolai ,
הבעיה שלי כשאני מנסה להשתמש בפונקציה זה מודיע לי שהוא לא מצליח לגשת אל $dbh ומקודם זה עבד.
תודה על העזרה
<?php
  try {
    require 'config.php';
    $dbh = new PDO("mysql:host=".$db['host'].";dbname=".$db['name'].";charset=UTF-8",$db['username'],$db['password']);
  }
  catch(PDOException $e)
  {
    $error = "ההתחברות נכשלה";
    exit;
  }
 
  function getInfo($field)
  {
    try {
      $getInfo = $dbh->query('SELECT * FROM message') or die();
      while($row = $getInfo->fetch(PDO::FETCH_ASSOC))
      {
        return $row[$field];
      }
    } catch (PDOException $e){
      $error = "ההתחברות נכשלה";
      exit;
    }
  }

5 תשובות

avatar ענה OrelBeY ב 17 לפברואר 2013 #

בלי להסתכל יותר מדי, איך אתה ניגש אל $dbh בתוך פונקציה? לפונקציות יש Scope משלהם. אם המשתנה הזה גלובלי, אתה יכול לעשות משהו כזה:

function foo()
{
    $dbh = $GLOBALS['dbh']
}

הערה נוספת: exit ו-die הם פרקטיקה גרועה.
1. זה יכול להרוס לך את כל המבנה של הדף.
2. משתמשים אוהבים דפים יפים ומסודרים, ולא הודעות שגיאה סתם כך.

avatar ענה intval ב 17 לפברואר 2013 #

המקרה שלך הוא כמו המקרה הבא:

$hello = 'hello';

function afunc()
{
  echo $hello;
}


afunc();


המשתנה dbh בכלל לא קיים בתוך הפונקציה הזו, כמו שהמשתנה hello לא קיים בפונקציה שבדוגמה.
הפרתון בשבילך יכול להיות הסינגלטון

avatar ענה iiddaannyy ב 22 לפברואר 2013 #

http://phpguide.co.il/phplive?code=672

avatar ענה nikolai ב 24 לפברואר 2013 #

בסוף עשיתי פתרון כזה
http://phpguide.co.il/phplive?code=675
איך זה?

avatar ענה intval ב 24 לפברואר 2013 #

זה כמעט אידאלי, אם היית משנה את זה קצת ומעביר מופע של מחלקה בקונסטרקטור.

public function __construct(PDO $db)
{
  $this->db = $db;
}